1 /* 2 * Copyright (C) 2018 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 com.android.permissioncontroller.role.ui.handheld; 18 19 import android.app.ActionBar; 20 import android.os.Bundle; 21 import android.view.LayoutInflater; 22 import android.view.Menu; 23 import android.view.MenuInflater; 24 import android.view.MenuItem; 25 import android.view.View; 26 import android.view.ViewGroup; 27 import android.widget.FrameLayout; 28 import android.widget.LinearLayout; 29 import android.widget.TextView; 30 31 import androidx.annotation.NonNull; 32 import androidx.annotation.Nullable; 33 import androidx.annotation.StringRes; 34 import androidx.preference.PreferenceFragmentCompat; 35 import androidx.preference.PreferenceScreen; 36 37 import com.android.permissioncontroller.R; 38 import com.android.permissioncontroller.permission.utils.Utils; 39 import com.android.permissioncontroller.role.utils.UiUtils; 40 import com.android.settingslib.HelpUtils; 41 42 /** 43 * Base class for settings fragments. 44 */ 45 // Made public for com.android.permissioncontroller.role.ui.specialappaccess.handheld 46 public abstract class SettingsFragment extends PreferenceFragmentCompat { 47 48 private FrameLayout mContentLayout; 49 private LinearLayout mPreferenceLayout; 50 private View mLoadingView; 51 private TextView mEmptyText; 52 53 @Override onCreate(@ullable Bundle savedInstanceState)54 public void onCreate(@Nullable Bundle savedInstanceState) { 55 super.onCreate(savedInstanceState); 56 57 setHasOptionsMenu(true); 58 } 59 60 @Override onCreateView(@onNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)61 public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, 62 @Nullable Bundle savedInstanceState) { 63 mContentLayout = (FrameLayout) inflater.inflate(R.layout.settings, container, false); 64 mPreferenceLayout = (LinearLayout) super.onCreateView(inflater, container, 65 savedInstanceState); 66 mContentLayout.addView(mPreferenceLayout); 67 return mContentLayout; 68 } 69 70 @Override onViewCreated(@onNull View view, @Nullable Bundle savedInstanceState)71 public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { 72 super.onViewCreated(view, savedInstanceState); 73 74 mLoadingView = mContentLayout.findViewById(R.id.loading); 75 mEmptyText = mContentLayout.findViewById(R.id.empty); 76 } 77 78 @Override onCreatePreferences(@ullable Bundle savedInstanceState, @Nullable String rootKey)79 public void onCreatePreferences(@Nullable Bundle savedInstanceState, @Nullable String rootKey) { 80 // We'll manually add preferences later. 81 } 82 83 @Override onActivityCreated(@ullable Bundle savedInstanceState)84 public void onActivityCreated(@Nullable Bundle savedInstanceState) { 85 super.onActivityCreated(savedInstanceState); 86 87 ActionBar actionBar = requireActivity().getActionBar(); 88 if (actionBar != null) { 89 actionBar.setDisplayHomeAsUpEnabled(true); 90 } 91 92 mEmptyText.setText(getEmptyTextResource()); 93 94 updateState(); 95 } 96 97 @StringRes getEmptyTextResource()98 protected abstract int getEmptyTextResource(); 99 100 @Override onCreateOptionsMenu(@onNull Menu menu, @NonNull MenuInflater inflater)101 public void onCreateOptionsMenu(@NonNull Menu menu, @NonNull MenuInflater inflater) { 102 super.onCreateOptionsMenu(menu, inflater); 103 104 Utils.prepareSearchMenuItem(menu, requireContext()); 105 int helpUriResource = getHelpUriResource(); 106 if (helpUriResource != 0) { 107 HelpUtils.prepareHelpMenuItem(requireActivity(), menu, helpUriResource, 108 getClass().getName()); 109 } 110 } 111 112 @StringRes getHelpUriResource()113 protected int getHelpUriResource() { 114 return 0; 115 } 116 117 @Override onOptionsItemSelected(@onNull MenuItem item)118 public boolean onOptionsItemSelected(@NonNull MenuItem item) { 119 switch (item.getItemId()) { 120 case android.R.id.home: 121 requireActivity().finish(); 122 return true; 123 default: 124 return super.onOptionsItemSelected(item); 125 } 126 } 127 updateState()128 protected void updateState() { 129 PreferenceScreen preferenceScreen = getPreferenceScreen(); 130 boolean isLoading = preferenceScreen == null; 131 UiUtils.setViewShown(mLoadingView, isLoading); 132 boolean isEmpty = preferenceScreen != null && preferenceScreen.getPreferenceCount() == 0; 133 UiUtils.setViewShown(mEmptyText, isEmpty); 134 } 135 } 136