Skip to content

Commit

Permalink
- Added Android M runtime permissions.
Browse files Browse the repository at this point in the history
- Fixed greetings MIME handling.
- Updated SDK and support libraries.
  • Loading branch information
micwallace committed Aug 22, 2016
1 parent 280f094 commit 0a86a60
Show file tree
Hide file tree
Showing 20 changed files with 326 additions and 137 deletions.
8 changes: 4 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -26,21 +26,21 @@ dependencies {
exclude group: 'org.hamcrest', module: 'hamcrest-core'
}
compile 'commons-io:commons-io:2.4'
compile 'com.android.support:support-v4:23.4.0'
compile 'com.android.support:support-v13:23.4.0'
compile 'com.android.support:support-v4:24.2.0'
compile 'com.android.support:support-v13:24.2.0'
compile 'net.sourceforge.htmlcleaner:htmlcleaner:2.10'
compile 'de.cketti.library.changelog:ckchangelog:1.2.1'
compile 'com.github.bumptech.glide:glide:3.4.0'
compile 'org.sufficientlysecure:openpgp-api:8.0'
}

android {
compileSdkVersion 23
compileSdkVersion 24
buildToolsVersion '21.1.2'

defaultConfig {
minSdkVersion 15
targetSdkVersion 23
targetSdkVersion 24

testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
}
Expand Down
22 changes: 13 additions & 9 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="au.com.wallaceit.voicemail"
android:versionCode="12"
android:versionName="1.10" >
android:versionCode="13"
android:versionName="1.11" >

<uses-feature
android:name="android.hardware.touchscreen"
Expand All @@ -19,7 +19,7 @@
<uses-permission android:name="android.permission.READ_SYNC_SETTINGS" />

<!-- Needed to mark a contact as contacted -->
<uses-permission android:name="android.permission.WRITE_CONTACTS" />
<!--<uses-permission android:name="android.permission.WRITE_CONTACTS" />-->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.VIBRATE" />
Expand All @@ -30,12 +30,11 @@
<uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECEIVE_SMS" />
<uses-permission android:name="android.permission.BROADCAST_SMS" />
<uses-permission android:name="android.permission.READ_SMS" />
<!--<uses-permission android:name="android.permission.READ_SMS" />-->
<uses-permission android:name="android.permission.SEND_SMS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<!--<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />-->
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.CALL_PHONE" android:required="false" />

Expand Down Expand Up @@ -250,9 +249,14 @@
</receiver>
<receiver
android:name=".service.SmsReceiver"
android:enabled="false">
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="android.provider.Telephony.SMS_RECEIVED" />
<action android:name="android.intent.action.DATA_SMS_RECEIVED" />
<data
android:scheme="sms"
android:host="localhost"
android:port="90" />
</intent-filter>
</receiver>

Expand Down
110 changes: 79 additions & 31 deletions app/src/main/java/au/com/wallaceit/voicemail/VisualVoicemail.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@

package au.com.wallaceit.voicemail;

import android.Manifest;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Application;
import android.content.ComponentName;
Expand All @@ -19,13 +20,16 @@
import android.os.Handler;
import android.os.Looper;
import android.os.StrictMode;
import android.support.v4.app.ActivityCompat;
import android.support.v4.content.ContextCompat;
import android.text.Html;
import android.text.format.Time;
import android.text.method.LinkMovementMethod;
import android.util.Log;
import android.view.LayoutInflater;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;

import com.fsck.k9.mail.Address;
import com.fsck.k9.mail.K9MailLib;
Expand All @@ -43,6 +47,7 @@
import java.util.concurrent.SynchronousQueue;

import au.com.wallaceit.voicemail.Account.SortType;
import au.com.wallaceit.voicemail.activity.MessageList;
import au.com.wallaceit.voicemail.activity.UpgradeDatabases;
import au.com.wallaceit.voicemail.controller.MessagingController;
import au.com.wallaceit.voicemail.controller.MessagingListener;
Expand Down Expand Up @@ -207,7 +212,7 @@ public enum NotificationQuickDelete {
}

private static LockScreenNotificationVisibility sLockScreenNotificationVisibility =
LockScreenNotificationVisibility.MESSAGE_COUNT;
LockScreenNotificationVisibility.MESSAGE_COUNT;

public enum LockScreenNotificationVisibility {
EVERYTHING,
Expand Down Expand Up @@ -338,12 +343,11 @@ public enum SplitViewMode {
public static final int NOTIFICATION_LED_BLINK_FAST = 1;



public static final int NOTIFICATION_LED_FAILURE_COLOR = 0xffff0000;

// Must not conflict with an account number
public static final int FETCHING_EMAIL_NOTIFICATION = -5000;
public static final int SEND_FAILED_NOTIFICATION = -1500;
public static final int FETCHING_EMAIL_NOTIFICATION = -5000;
public static final int SEND_FAILED_NOTIFICATION = -1500;
public static final int CERTIFICATE_EXCEPTION_NOTIFICATION_INCOMING = -2000;
public static final int CERTIFICATE_EXCEPTION_NOTIFICATION_OUTGOING = -2500;
public static final int CONNECTIVITY_ID = -3;
Expand Down Expand Up @@ -400,19 +404,19 @@ private static void setServicesEnabled(Context context, boolean enabled, Integer
*/
MailService.actionReset(context, wakeLockId);
}
Class<?>[] classes = { BootReceiver.class, MailService.class };
Class<?>[] classes = {BootReceiver.class, MailService.class};

for (Class<?> clazz : classes) {

boolean alreadyEnabled = pm.getComponentEnabledSetting(new ComponentName(context, clazz)) ==
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;
PackageManager.COMPONENT_ENABLED_STATE_ENABLED;

if (enabled != alreadyEnabled) {
pm.setComponentEnabledSetting(
new ComponentName(context, clazz),
enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
new ComponentName(context, clazz),
enabled ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}

Expand Down Expand Up @@ -558,11 +562,13 @@ public void onCreate() {

sIsDebuggable = ((getApplicationInfo().flags & ApplicationInfo.FLAG_DEBUGGABLE) != 0);
K9MailLib.setDebugStatus(new K9MailLib.DebugStatus() {
@Override public boolean enabled() {
@Override
public boolean enabled() {
return DEBUG;
}

@Override public boolean debugSensitive() {
@Override
public boolean debugSensitive() {
return DEBUG_SENSITIVE;
}
});
Expand Down Expand Up @@ -604,17 +610,17 @@ private void broadcastIntent(String action, Account account, String folder, Mess
VisualVoicemail.this.sendBroadcast(intent);
if (VisualVoicemail.DEBUG)
Log.d(VisualVoicemail.LOG_TAG, "Broadcasted: action=" + action
+ " account=" + account.getDescription()
+ " folder=" + folder
+ " message uid=" + message.getUid()
);
+ " account=" + account.getDescription()
+ " folder=" + folder
+ " message uid=" + message.getUid()
);

} catch (MessagingException e) {
Log.w(VisualVoicemail.LOG_TAG, "Error: action=" + action
+ " account=" + account.getDescription()
+ " folder=" + folder
+ " message uid=" + message.getUid()
);
+ " account=" + account.getDescription()
+ " folder=" + folder
+ " message uid=" + message.getUid()
);
}
}

Expand Down Expand Up @@ -648,7 +654,7 @@ public void synchronizeMailboxNewMessage(Account account, String folder, Message

@Override
public void folderStatusChanged(Account account, String folderName,
int unreadMessageCount) {
int unreadMessageCount) {

updateUnreadWidget();

Expand Down Expand Up @@ -771,7 +777,7 @@ public static void loadPrefs(Preferences prefs) {
}

String lockScreenNotificationVisibility = sprefs.getString("lockScreenNotificationVisibility", null);
if(lockScreenNotificationVisibility != null) {
if (lockScreenNotificationVisibility != null) {
sLockScreenNotificationVisibility = LockScreenNotificationVisibility.valueOf(lockScreenNotificationVisibility);
}

Expand All @@ -780,7 +786,7 @@ public static void loadPrefs(Preferences prefs) {
sSplitViewMode = SplitViewMode.valueOf(splitViewMode);
}

mAttachmentDefaultPath = sprefs.getString("attachmentdefaultpath", Environment.getExternalStorageDirectory().toString()+"/Voicemail");
mAttachmentDefaultPath = sprefs.getString("attachmentdefaultpath", Environment.getExternalStorageDirectory().toString() + "/Voicemail");
sUseBackgroundAsUnreadIndicator = sprefs.getBoolean("useBackgroundAsUnreadIndicator", true);
sThreadedViewEnabled = sprefs.getBoolean("threadedView", true);
fontSizes.load(sprefs);
Expand Down Expand Up @@ -1026,7 +1032,7 @@ public static boolean isQuietTime() {

Integer now = (time.hour * 60) + time.minute;
Integer quietStarts = startHour * 60 + startMinute;
Integer quietEnds = endHour * 60 + endMinute;
Integer quietEnds = endHour * 60 + endMinute;

// If start and end times are the same, we're never quiet
if (quietStarts.equals(quietEnds)) {
Expand Down Expand Up @@ -1055,7 +1061,6 @@ public static boolean isQuietTime() {
}



public static boolean startIntegratedInbox() {
return mStartIntegratedInbox;
}
Expand Down Expand Up @@ -1100,13 +1105,14 @@ public static boolean showCorrespondentNames() {
return mShowCorrespondentNames;
}

public static boolean messageListSenderAboveSubject() {
return mMessageListSenderAboveSubject;
}
public static boolean messageListSenderAboveSubject() {
return mMessageListSenderAboveSubject;
}

public static void setMessageListSenderAboveSubject(boolean sender) {
mMessageListSenderAboveSubject = sender;
mMessageListSenderAboveSubject = sender;
}

public static void setShowCorrespondentNames(boolean showCorrespondentNames) {
mShowCorrespondentNames = showCorrespondentNames;
}
Expand Down Expand Up @@ -1254,20 +1260,23 @@ public static void setLockScreenNotificationVisibility(final LockScreenNotificat
public static boolean wrapFolderNames() {
return mWrapFolderNames;
}

public static void setWrapFolderNames(final boolean state) {
mWrapFolderNames = state;
}

public static boolean hideUserAgent() {
return mHideUserAgent;
}

public static void setHideUserAgent(final boolean state) {
mHideUserAgent = state;
}

public static boolean hideTimeZone() {
return mHideTimeZone;
}

public static void setHideTimeZone(final boolean state) {
mHideTimeZone = state;
}
Expand Down Expand Up @@ -1412,6 +1421,7 @@ public static synchronized void setDatabasesUpToDate(boolean save) {
editor.commit();
}
}

/**
* Get current version number.
*
Expand All @@ -1428,7 +1438,7 @@ public static String getVersionNumber(Context context) {
return version;
}

public static void showAboutDialog(Context context){
public static void showAboutDialog(Context context) {
LayoutInflater inflater = (LayoutInflater) context.getSystemService(LAYOUT_INFLATER_SERVICE);
LinearLayout about = (LinearLayout) inflater.inflate(R.layout.about, null);
((TextView) about.findViewById(R.id.about_version)).setText(String.format(context.getString(R.string.debug_version_fmt), VisualVoicemail.getVersionNumber(context)));
Expand All @@ -1446,4 +1456,42 @@ public void onClick(DialogInterface d, int c) {
})
.show();
}

// This is the bulk of the runtime permission handling
public final static int REQUEST_CONTACT_PERMISSION = 1;
public final static int REQUEST_PHONE_PERMISSION = 2;
public final static int REQUEST_RECORD_PERMISSION = 3;
public final static int REQUEST_STORAGE_PERMISSION = 4;
public final static int REQUEST_SMS_PERMISSION = 5;
public final static int REQUEST_SMSFULL_PERMISSION = 6;

public static boolean requestExternalStoragePermissions(Activity activity, String reason) {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_STORAGE_PERMISSION);
Toast.makeText(activity, reason, Toast.LENGTH_LONG).show();
return true;
}
return false;
}

private String callNumber = null;

public void callPhoneNumber(Activity activity, String number) {
if (ContextCompat.checkSelfPermission(activity, Manifest.permission.CALL_PHONE) != PackageManager.PERMISSION_GRANTED) {
callNumber = number;
ActivityCompat.requestPermissions(activity, new String[]{Manifest.permission.CALL_PHONE}, REQUEST_PHONE_PERMISSION);
Toast.makeText(activity, "Phone permission needed to call.", Toast.LENGTH_LONG).show();
return;
}
Intent intent = new Intent(Intent.ACTION_CALL);
intent.setData(Uri.parse("tel:" + number));
activity.startActivity(intent);
}

public void onPhonePermissionSuccess(Activity activity) {
if (callNumber != null) {
callPhoneNumber(activity, callNumber);
callNumber = null;
}
}
}
Loading

0 comments on commit 0a86a60

Please sign in to comment.