/* * Copyright (C) 2015 AChep@xda <artemchep@gmail.com> * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License * as published by the Free Software Foundation; either version 2 * of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, * MA 02110-1301, USA. */ package com.achep.base.ui.fragments.dialogs; import android.app.Dialog; import android.content.ActivityNotFoundException; import android.content.Context; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.v4.app.DialogFragment; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.TextView; import com.achep.acdisplay.R; import com.achep.base.permissions.Permission; import com.achep.base.ui.adapters.PermissionAdapter; import com.achep.base.utils.ToastUtils; import com.afollestad.materialdialogs.MaterialDialog; import java.util.ArrayList; import java.util.List; /** * Dialog fragment that helps user to give all needed permissions * to the app. * * @author Artem Chepurnoy */ public class PermissionsDialog extends DialogFragment { private static final String KEY_PERMISSIONS = "permissions"; private PermissionAdapter mAdapter; private Permission[] mPermissions; public static PermissionsDialog newInstance(@NonNull Permission[] permissions) { String[] p = new String[permissions.length]; for (int i = 0; i < p.length; i++) { p[i] = permissions[i].getClass().getSimpleName(); } Bundle bundle = new Bundle(); bundle.putStringArray(KEY_PERMISSIONS, p); PermissionsDialog fragment = new PermissionsDialog(); fragment.setArguments(bundle); return fragment; } @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Get permissions array Bundle args = getArguments(); assert args != null; String[] p = args.getStringArray(KEY_PERMISSIONS); mPermissions = new Permission[p == null ? 0 : p.length]; for (int i = 0; i < p.length; i++) { final String name = p[i]; mPermissions[i] = Permission.newInstance(getActivity(), name); } } @NonNull @Override public Dialog onCreateDialog(Bundle savedInstanceState) { Context context = getActivity(); assert context != null; MaterialDialog md = new MaterialDialog.Builder(context) .title(R.string.permissions_dialog_title) .items(new CharSequence[]{"", ""}) .negativeText(R.string.later) .build(); // Make title more red TextView title = md.getTitleView(); title.setTextColor(title.getCurrentTextColor() & 0xFFFF3333 | 0xFF << 16); ListView listView = md.getListView(); assert listView != null; mAdapter = new PermissionAdapter(context, new ArrayList<Permission>()); listView.setAdapter(mAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { PermissionAdapter adapter = (PermissionAdapter) parent.getAdapter(); Permission item = adapter.getItem(position); try { startActivity(item.getIntentSettings()); } catch (ActivityNotFoundException e) { int msg = item.getErrorResource(); if (msg != 0) ToastUtils.showLong(getActivity(), msg); } } }); return md; } @Override public void onResume() { super.onResume(); List<Permission> data = mAdapter.getPermissionList(); data.clear(); for (Permission item : mPermissions) { if (!item.isGranted()) { data.add(item); } } // Dismiss permission dialog if there's no work for it. if (data.isEmpty()) { dismiss(); } mAdapter.notifyDataSetChanged(); } }