Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c044555 authored by Suhail Alkowaileet's avatar Suhail Alkowaileet
Browse files

Fix permission request in Android 6.0.1 / CM13.0 #43

parent 9d72ffac
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="ws.xsoh.etar"
    android:installLocation="auto"
    android:versionCode="7"
    android:versionName="1.0.3">
    android:versionCode="8"
    android:versionName="1.0.4">
<!--         android:sharedUserLabel="@string/app_label"> -->

    <!--
+2 −0
Original line number Diff line number Diff line
@@ -274,4 +274,6 @@
  </plurals>
    <string name="acessibility_recurrence_choose_end_date_description" msgid="5899029840837836711">"تغيير تاريخ الانتهاء"</string>
  <string name="goto_date">"الذهاب إلى…"</string>
  <string name="calendar_permission_not_granted">"يتعذر التطبيق عن تشغيل هذه الخاصية، يتطلب تطبيق إيتار صلاحياتي القراءة والكتابة على التقويم حتى يعمل بالشكل المطلوب"</string>
  <string name="user_rejected_calendar_write_permission">"يتعذر التطبيق عن التشغيل، إيتار يتطلب صلاحياتي القراءة والكتابة على التقويم حتى يعمل بالشكل المطلوب"</string>
</resources>
+3 −0
Original line number Diff line number Diff line
@@ -741,4 +741,7 @@

    <!-- Do Not Translate.  Sender identity for global notification synchronization. -->
    <string name="notification_sender_id" translatable="false"></string>

    <string name="user_rejected_calendar_write_permission">Etar requires calendar read and write permissions to work properly. Please try again.</string>
    <string name="calendar_permission_not_granted">Sorry this feature can\'t work. Etar requires calendar read and write permissions to work properly</string>
</resources>
+53 −4
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@

package com.android.calendar;

import android.Manifest;
import android.accounts.AccountManager;
import android.accounts.AccountManagerCallback;
import android.accounts.AccountManagerFuture;
@@ -34,12 +35,14 @@ import android.content.ContentUris;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
import android.content.pm.PackageManager;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.database.ContentObserver;
import android.database.Cursor;
import android.graphics.drawable.LayerDrawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.os.Handler;
import android.provider.CalendarContract;
@@ -48,6 +51,8 @@ import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.NavigationView;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.support.v4.view.MenuItemCompat;
import android.support.v4.widget.DrawerLayout;
import android.support.v7.app.ActionBar;
@@ -67,6 +72,7 @@ import android.widget.LinearLayout;
import android.widget.RelativeLayout;
import android.widget.RelativeLayout.LayoutParams;
import android.widget.TextView;
import android.widget.Toast;

import com.android.calendar.CalendarController.EventHandler;
import com.android.calendar.CalendarController.EventInfo;
@@ -99,6 +105,7 @@ public class AllInOneActivity extends AbstractCalendarActivity implements EventH
    private static final String BUNDLE_KEY_RESTORE_VIEW = "key_restore_view";
    private static final String BUNDLE_KEY_CHECK_ACCOUNTS = "key_check_for_accounts";
    private static final int HANDLER_KEY = 0;
    private static final int PERMISSIONS_REQUEST_WRITE_CALENDAR = 0;

    // Indices of buttons for the drop down menu (tabs replacement)
    // Must match the strings in the array buttons_list in arrays.xml and the
@@ -193,20 +200,20 @@ public class AllInOneActivity extends AbstractCalendarActivity implements EventH
    private MenuItem mControlsMenu;
    private Menu mOptionsMenu;
    private QueryHandler mHandler;
    // runs every midnight/time changes and refreshes the today icon
    private final Runnable mTimeChangesUpdater = new Runnable() {
    private final Runnable mHomeTimeUpdater = new Runnable() {
        @Override
        public void run() {
            mTimeZone = Utils.getTimeZone(AllInOneActivity.this, mHomeTimeUpdater);
            updateSecondaryTitleFields(-1);
            AllInOneActivity.this.invalidateOptionsMenu();
            Utils.setMidnightUpdater(mHandler, mTimeChangesUpdater, mTimeZone);
        }
    };
    private final Runnable mHomeTimeUpdater = new Runnable() {
    // runs every midnight/time changes and refreshes the today icon
    private final Runnable mTimeChangesUpdater = new Runnable() {
        @Override
        public void run() {
            mTimeZone = Utils.getTimeZone(AllInOneActivity.this, mHomeTimeUpdater);
            updateSecondaryTitleFields(-1);
            AllInOneActivity.this.invalidateOptionsMenu();
            Utils.setMidnightUpdater(mHandler, mTimeChangesUpdater, mTimeZone);
        }
@@ -265,6 +272,8 @@ public class AllInOneActivity extends AbstractCalendarActivity implements EventH
        // This needs to be created before setContentView
        mController = CalendarController.getInstance(this);

        // Check and ask for most needed permissions
        checkAppPermissions();

        // Get time from intent or icicle
        long timeMillis = -1;
@@ -379,6 +388,46 @@ public class AllInOneActivity extends AbstractCalendarActivity implements EventH
        mContentResolver = getContentResolver();
    }

    private void checkAppPermissions() {
        // Here, thisActivity is the current activity
        if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(this,
                Manifest.permission.WRITE_CALENDAR)
                != PackageManager.PERMISSION_GRANTED) {

            // No explanation needed, we can request the permission.

            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.WRITE_CALENDAR},
                    PERMISSIONS_REQUEST_WRITE_CALENDAR);


        }

    }

    @Override
    public void onRequestPermissionsResult(int requestCode,
                                           String permissions[], int[] grantResults) {
        switch (requestCode) {
            case PERMISSIONS_REQUEST_WRITE_CALENDAR: {
                // If request is cancelled, the result arrays are empty.
                if (grantResults.length > 0
                        && grantResults[0] == PackageManager.PERMISSION_GRANTED) {

                    // permission was granted, yay!

                } else {
                    Toast.makeText(getApplicationContext(), R.string.user_rejected_calendar_write_permission, Toast.LENGTH_LONG).show();
                    this.finish();
                }
                return;
            }

            // other 'case' lines to check for other
            // permissions this app might request
        }
    }

    private void setupToolbar(int viewType) {
        mToolbar = (Toolbar) findViewById(R.id.toolbar);
        if (mToolbar == null) {
+11 −0
Original line number Diff line number Diff line
@@ -16,18 +16,22 @@

package com.android.calendar;

import android.Manifest;
import android.content.ContentResolver;
import android.content.ContentUris;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.os.Debug;
import android.provider.CalendarContract.Attendees;
import android.provider.CalendarContract.Calendars;
import android.provider.CalendarContract.Events;
import android.provider.CalendarContract.Instances;
import android.support.v4.content.ContextCompat;
import android.text.TextUtils;
import android.text.format.DateUtils;
import android.util.Log;
@@ -178,6 +182,13 @@ public class Event implements Cloneable {
            Debug.startMethodTracing("loadEvents");
        }

        if (Build.VERSION.SDK_INT >= 23 && ContextCompat.checkSelfPermission(context,
                Manifest.permission.READ_CALENDAR)
                != PackageManager.PERMISSION_GRANTED) {
            //If permission is not granted then just return.
            return;
        }

        Cursor cEvents = null;
        Cursor cAllday = null;

Loading