Home | History | Annotate | Download | only in settings
      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
     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