1 /*******************************************************************************
2  *      Copyright (C) 2014 Google Inc.
3  *      Licensed to The Android Open Source Project.
4  *
5  *      Licensed under the Apache License, Version 2.0 (the "License");
6  *      you may not use this file except in compliance with the License.
7  *      You may obtain a copy of the License at
8  *
9  *           http://www.apache.org/licenses/LICENSE-2.0
10  *
11  *      Unless required by applicable law or agreed to in writing, software
12  *      distributed under the License is distributed on an "AS IS" BASIS,
13  *      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  *      See the License for the specific language governing permissions and
15  *      limitations under the License.
16  *******************************************************************************/
17 
18 package com.android.mail.ui.settings;
19 
20 import android.app.Activity;
21 import android.content.Intent;
22 import android.net.Uri;
23 import android.os.Bundle;
24 import android.preference.PreferenceActivity;
25 import android.text.TextUtils;
26 
27 import java.util.Set;
28 
29 /**
30  * Activity that allows directly launching into the preference activity, from external parties
31  */
32 public class PublicPreferenceActivity extends Activity {
33 
34     // TODO: Temporary. Once the app-specific preference activities are deleted, this will no longer
35     // be needed. This is set by the application subclasses
36     public static Class<? extends MailPreferenceActivity> sPreferenceActivityClass;
37 
38     @Override
onCreate(Bundle savedInstanceState)39     public void onCreate(Bundle savedInstanceState) {
40         super.onCreate(savedInstanceState);
41 
42         final Intent intent = getIntent();
43 
44         // We need to remove the extra that allows a fragment to be directly opened
45         intent.removeExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT);
46         intent.removeExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_ARGUMENTS);
47         intent.removeExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_SHORT_TITLE);
48         intent.removeExtra(PreferenceActivity.EXTRA_SHOW_FRAGMENT_TITLE);
49 
50         // Remove any fragment specifier from the data uri
51         final Uri dataUri = intent.getData();
52         if (dataUri != null) {
53             final String fragmentIdStr =
54                     dataUri.getQueryParameter(MailPreferenceActivity.PREFERENCE_FRAGMENT_ID);
55             if (fragmentIdStr != null) {
56                 final Set<String> paramNames = dataUri.getQueryParameterNames();
57 
58                 final Uri.Builder builder = dataUri.buildUpon().clearQuery();
59 
60                 for (String param : paramNames) {
61                     if (!TextUtils.equals(param, MailPreferenceActivity.PREFERENCE_FRAGMENT_ID)) {
62                         builder.appendQueryParameter(param, dataUri.getQueryParameter(param));
63                     }
64                 }
65                 intent.setData(builder.build());
66             }
67         }
68 
69         if (sPreferenceActivityClass == null) {
70             sPreferenceActivityClass = MailPreferenceActivity.class;
71         }
72         // Force this intent to be sent to the appropriate MailPreferenceActivity class
73         intent.setClass(this, sPreferenceActivityClass);
74 
75         startActivity(intent);
76         finish();
77     }
78 }
79