Home | History | Annotate | Download | only in timezone
      1 /*
      2  * Copyright (C) 2017 The Android Open Source Project
      3  *
      4  * Licensed under the Apache License, Version 2.0 (the "License");
      5  * you may not use this file except in compliance with the License.
      6  * You may obtain a copy of the License at
      7  *
      8  *      http://www.apache.org/licenses/LICENSE-2.0
      9  *
     10  * Unless required by applicable law or agreed to in writing, software
     11  * distributed under the License is distributed on an "AS IS" BASIS,
     12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13  * See the License for the specific language governing permissions and
     14  * limitations under the License.
     15  */
     16 
     17 package android.app.timezone;
     18 
     19 import android.content.Context;
     20 import android.content.Intent;
     21 import android.os.ParcelFileDescriptor;
     22 import android.os.UserHandle;
     23 
     24 /**
     25  * Constants related to the contract between the Android system and the privileged time zone updater
     26  * application.
     27  *
     28  * @hide
     29  */
     30 public final class RulesUpdaterContract {
     31 
     32     /**
     33      * The system permission possessed by the Android system that allows it to trigger time zone
     34      * update checks. The updater should be configured to require this permission when registering
     35      * for {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intents.
     36      */
     37     public static final String TRIGGER_TIME_ZONE_RULES_CHECK_PERMISSION =
     38             android.Manifest.permission.TRIGGER_TIME_ZONE_RULES_CHECK;
     39 
     40     /**
     41      * The system permission possessed by the time zone rules updater app that allows it to update
     42      * device time zone rules. The Android system requires this permission for calls made to
     43      * {@link RulesManager}.
     44      */
     45     public static final String UPDATE_TIME_ZONE_RULES_PERMISSION =
     46             android.Manifest.permission.UPDATE_TIME_ZONE_RULES;
     47 
     48     /**
     49      * The action of the intent that the Android system will broadcast. The intent will be targeted
     50      * at the configured updater application's package meaning the term "broadcast" only loosely
     51      * applies.
     52      */
     53     public static final String ACTION_TRIGGER_RULES_UPDATE_CHECK =
     54             "com.android.intent.action.timezone.TRIGGER_RULES_UPDATE_CHECK";
     55 
     56     /**
     57      * The extra containing the {@code byte[]} that should be passed to
     58      * {@link RulesManager#requestInstall(ParcelFileDescriptor, byte[], Callback)},
     59      * {@link RulesManager#requestUninstall(byte[], Callback)} and
     60      * {@link RulesManager#requestNothing(byte[], boolean)} methods when the
     61      * {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intent has been processed.
     62      */
     63     public static final String EXTRA_CHECK_TOKEN =
     64             "com.android.intent.extra.timezone.CHECK_TOKEN";
     65 
     66     /**
     67      * Creates an intent that would trigger a time zone rules update check.
     68      */
     69     public static Intent createUpdaterIntent(String updaterPackageName) {
     70         Intent intent = new Intent(RulesUpdaterContract.ACTION_TRIGGER_RULES_UPDATE_CHECK);
     71         intent.setPackage(updaterPackageName);
     72         intent.setFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES);
     73         return intent;
     74     }
     75 
     76     /**
     77      * Broadcasts an {@link #ACTION_TRIGGER_RULES_UPDATE_CHECK} intent with the
     78      * {@link #EXTRA_CHECK_TOKEN} that triggers an update check, including the required receiver
     79      * permission.
     80      */
     81     public static void sendBroadcast(Context context, String updaterAppPackageName,
     82             byte[] checkTokenBytes) {
     83         Intent intent = createUpdaterIntent(updaterAppPackageName);
     84         intent.putExtra(EXTRA_CHECK_TOKEN, checkTokenBytes);
     85         context.sendBroadcastAsUser(
     86                 intent, UserHandle.SYSTEM,
     87                 RulesUpdaterContract.UPDATE_TIME_ZONE_RULES_PERMISSION);
     88     }
     89 }
     90