| /* |
| * Copyright (C) 2018 The Android Open Source Project |
| * |
| * Licensed under the Apache License, Version 2.0 (the "License"); |
| * you may not use this file except in compliance with the License. |
| * You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, software |
| * distributed under the License is distributed on an "AS IS" BASIS, |
| * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| * See the License for the specific language governing permissions and |
| * limitations under the License. |
| */ |
| |
| package com.android.permissioncontroller.role.ui; |
| |
| import android.content.Context; |
| import android.content.Intent; |
| import android.os.Bundle; |
| import android.os.Process; |
| import android.os.UserHandle; |
| import android.util.Log; |
| |
| import androidx.annotation.NonNull; |
| import androidx.annotation.Nullable; |
| import androidx.fragment.app.Fragment; |
| |
| import com.android.permissioncontroller.DeviceUtils; |
| import com.android.permissioncontroller.R; |
| import com.android.permissioncontroller.role.ui.auto.AutoDefaultAppFragment; |
| import com.android.permissioncontroller.role.ui.handheld.HandheldDefaultAppFragment; |
| import com.android.permissioncontroller.role.ui.wear.WearDefaultAppFragment; |
| import com.android.role.controller.model.Role; |
| import com.android.role.controller.model.Roles; |
| |
| /** |
| * Activity for a default app. |
| */ |
| public class DefaultAppActivity extends SettingsActivity { |
| |
| private static final String LOG_TAG = DefaultAppActivity.class.getSimpleName(); |
| |
| /** |
| * Create an intent for starting this activity. |
| * |
| * @param roleName the name of the role for the default app |
| * @param user the user for the default app |
| * @param context the context to create the intent |
| * |
| * @return an intent to start this activity |
| */ |
| @NonNull |
| public static Intent createIntent(@NonNull String roleName, @NonNull UserHandle user, |
| @NonNull Context context) { |
| return new Intent(context, DefaultAppActivity.class) |
| .putExtra(Intent.EXTRA_ROLE_NAME, roleName) |
| .putExtra(Intent.EXTRA_USER, user); |
| } |
| |
| @Override |
| protected void onCreate(@Nullable Bundle savedInstanceState) { |
| if (DeviceUtils.isAuto(this)) { |
| // Automotive relies on a different theme. Apply before calling super so that |
| // fragments are restored properly on configuration changes. |
| setTheme(R.style.CarSettings); |
| } |
| super.onCreate(savedInstanceState); |
| |
| Intent intent = getIntent(); |
| String roleName = intent.getStringExtra(Intent.EXTRA_ROLE_NAME); |
| UserHandle user = intent.getParcelableExtra(Intent.EXTRA_USER); |
| // External callers might omit the user. |
| if (user == null) { |
| user = Process.myUserHandle(); |
| } |
| |
| Role role = Roles.get(this).get(roleName); |
| if (role == null) { |
| Log.e(LOG_TAG, "Unknown role: " + roleName); |
| finish(); |
| return; |
| } |
| if (!role.isAvailableAsUser(user, this)) { |
| Log.e(LOG_TAG, "Role is unavailable: " + roleName); |
| finish(); |
| return; |
| } |
| |
| if (!role.isVisibleAsUser(user, this)) { |
| Log.e(LOG_TAG, "Role is invisible: " + roleName); |
| finish(); |
| return; |
| } |
| |
| if (savedInstanceState == null) { |
| Fragment fragment; |
| if (DeviceUtils.isAuto(this)) { |
| fragment = AutoDefaultAppFragment.newInstance(roleName, user); |
| } else if (DeviceUtils.isWear(this)) { |
| fragment = WearDefaultAppFragment.Companion.newInstance(roleName, user); |
| } else { |
| fragment = HandheldDefaultAppFragment.newInstance(roleName, user); |
| } |
| getSupportFragmentManager().beginTransaction() |
| .add(android.R.id.content, fragment) |
| .commit(); |
| } |
| } |
| } |