diff --git a/.gitignore b/.gitignore
index afbdab33..a081993d 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,6 +1,48 @@
+#built application files
+*.apk
+*.ap_
+
+# files for the dex VM
+*.dex
+
+# Java class files
+*.class
+
+# built native files (uncomment if you build your own)
+# *.o
+# *.so
+
+# generated files
+bin/
+gen/
+
+# Local configuration file (sdk path, etc)
+local.properties
+
+# Proguard folder generated by Eclipse
+proguard/
+
+# Eclipse Metadata
+.metadata/
+
+# OSX files
+.DS_Store
+
+#Screenshot
+captures
+
+# Android Studio Projects
+*.iml
+app/app.iml
+.idea
.gradle
-/local.properties
+/build
+.navigation
+.idea/gradle.xml
/.idea/workspace.xml
+/.idea/tasks.xml
/.idea/libraries
-.DS_Store
-/build
+
+#NDK
+obj/
+.externalNativeBuild
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
deleted file mode 100644
index 217af471..00000000
--- a/.idea/compiler.xml
+++ /dev/null
@@ -1,23 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/.idea/encodings.xml b/.idea/encodings.xml
index e206d70d..97626ba4 100644
--- a/.idea/encodings.xml
+++ b/.idea/encodings.xml
@@ -1,5 +1,6 @@
-
-
-
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
deleted file mode 100644
index 2a7f5bfc..00000000
--- a/.idea/gradle.xml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index b0a270f5..af0bbdde 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,33 +1,11 @@
-
-
+
+
+
+
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
diff --git a/.idea/vcs.xml b/.idea/vcs.xml
index c63efbb2..35eb1ddf 100644
--- a/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -1,9 +1,6 @@
-
-
-
+
-
-
+
\ No newline at end of file
diff --git a/SoundRecorder b/SoundRecorder
deleted file mode 160000
index c0750ba5..00000000
--- a/SoundRecorder
+++ /dev/null
@@ -1 +0,0 @@
-Subproject commit c0750ba59ed02dbad8164a788dcd632d77376a05
diff --git a/SoundRecorder.iml b/SoundRecorder.iml
deleted file mode 100644
index 40b8fc4a..00000000
--- a/SoundRecorder.iml
+++ /dev/null
@@ -1,19 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/app.iml b/app/app.iml
deleted file mode 100644
index 1cdca55a..00000000
--- a/app/app.iml
+++ /dev/null
@@ -1,120 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- generateDebugSources
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index ae3d3494..ea36ca9b 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -1,13 +1,13 @@
apply plugin: 'com.android.application'
android {
- compileSdkVersion 21
- buildToolsVersion '25.0.0'
+ compileSdkVersion versions.compileSdk
+ buildToolsVersion "${versions.buildTools}"
defaultConfig {
applicationId "com.danielkim.soundrecorder"
- minSdkVersion 16
- targetSdkVersion 21
+ minSdkVersion versions.minSdk
+ targetSdkVersion versions.targetSdk
versionCode 130
versionName "1.3.0"
}
@@ -20,12 +20,18 @@ android {
lintOptions{
disable 'MissingTranslation'
}
+ configurations.all {
+ resolutionStrategy {
+ force "com.android.support:support-v4:${versions.support}"
+ }
+ }
}
dependencies {
- compile 'com.android.support:appcompat-v7:21.0.+'
- compile 'com.android.support:cardview-v7:21.0.+'
- compile 'com.android.support:recyclerview-v7:21.0.+'
- compile 'com.melnykov:floatingactionbutton:1.1.0'
- compile 'com.jpardogo.materialtabstrip:library:1.0.6'
+ implementation "com.android.support:appcompat-v7:${versions.support}"
+ implementation "com.android.support:cardview-v7:${versions.support}"
+ implementation "com.android.support:recyclerview-v7:${versions.support}"
+
+ implementation "com.melnykov:floatingactionbutton:${versions.floatingActionButton}"
+ implementation "com.jpardogo.materialtabstrip:library:${versions.materialTabStrip}"
}
diff --git a/app/src/main/java/com/danielkim/soundrecorder/activities/MainActivity.java b/app/src/main/java/com/danielkim/soundrecorder/activities/MainActivity.java
index a2e6bde7..2b458537 100644
--- a/app/src/main/java/com/danielkim/soundrecorder/activities/MainActivity.java
+++ b/app/src/main/java/com/danielkim/soundrecorder/activities/MainActivity.java
@@ -1,14 +1,12 @@
package com.danielkim.soundrecorder.activities;
import android.content.Intent;
-import android.content.SharedPreferences;
import android.os.Bundle;
-import android.preference.PreferenceManager;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;
import android.support.v4.app.FragmentPagerAdapter;
import android.support.v4.view.ViewPager;
-import android.support.v7.app.ActionBarActivity;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.view.Menu;
import android.view.MenuItem;
@@ -16,30 +14,31 @@
import com.astuetz.PagerSlidingTabStrip;
import com.danielkim.soundrecorder.R;
import com.danielkim.soundrecorder.fragments.FileViewerFragment;
-import com.danielkim.soundrecorder.fragments.LicensesFragment;
import com.danielkim.soundrecorder.fragments.RecordFragment;
-public class MainActivity extends ActionBarActivity{
+public class MainActivity extends AppCompatActivity {
private static final String LOG_TAG = MainActivity.class.getSimpleName();
- private PagerSlidingTabStrip tabs;
- private ViewPager pager;
-
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
- pager = (ViewPager) findViewById(R.id.pager);
- pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
- tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
- tabs.setViewPager(pager);
+ ViewPager pager = (ViewPager) findViewById(R.id.pager);
+ if(pager != null) {
+ pager.setAdapter(new MyAdapter(getSupportFragmentManager()));
+ }
+
+ PagerSlidingTabStrip tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs);
+ if(tabs != null && pager != null) {
+ tabs.setViewPager(pager);
+ }
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- toolbar.setPopupTheme(R.style.ThemeOverlay_AppCompat_Light);
if (toolbar != null) {
+ toolbar.setPopupTheme(R.style.ThemeOverlay_AppCompat_Light);
setSupportActionBar(toolbar);
}
}
diff --git a/app/src/main/java/com/danielkim/soundrecorder/activities/SettingsActivity.java b/app/src/main/java/com/danielkim/soundrecorder/activities/SettingsActivity.java
index fbb3bfef..77ed25ea 100644
--- a/app/src/main/java/com/danielkim/soundrecorder/activities/SettingsActivity.java
+++ b/app/src/main/java/com/danielkim/soundrecorder/activities/SettingsActivity.java
@@ -1,12 +1,9 @@
package com.danielkim.soundrecorder.activities;
-import android.app.Activity;
import android.os.Bundle;
-import android.os.PersistableBundle;
-import android.preference.PreferenceActivity;
import android.support.annotation.Nullable;
-import android.support.v4.app.ActivityCompat;
import android.support.v7.app.ActionBar;
+import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import com.danielkim.soundrecorder.R;
@@ -16,15 +13,18 @@
* Created by Daniel on 5/22/2017.
*/
-public class SettingsActivity extends android.support.v7.app.ActionBarActivity {
+public class SettingsActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_preferences);
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
- toolbar.setPopupTheme(R.style.ThemeOverlay_AppCompat_Light);
- setSupportActionBar(toolbar);
+ if(toolbar != null) {
+ toolbar.setPopupTheme(R.style.ThemeOverlay_AppCompat_Light);
+ setSupportActionBar(toolbar);
+ }
+
ActionBar actionBar = getSupportActionBar();
if (actionBar != null) {
actionBar.setTitle(R.string.action_settings);
diff --git a/app/src/main/java/com/danielkim/soundrecorder/fragments/RecordFragment.java b/app/src/main/java/com/danielkim/soundrecorder/fragments/RecordFragment.java
index 151822c0..ceebab19 100644
--- a/app/src/main/java/com/danielkim/soundrecorder/fragments/RecordFragment.java
+++ b/app/src/main/java/com/danielkim/soundrecorder/fragments/RecordFragment.java
@@ -1,9 +1,14 @@
package com.danielkim.soundrecorder.fragments;
+import android.Manifest;
import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.os.Build;
import android.os.Bundle;
import android.os.Environment;
import android.os.SystemClock;
+import android.support.annotation.NonNull;
+import android.support.v4.app.ActivityCompat;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
@@ -28,6 +33,9 @@
* create an instance of this fragment.
*/
public class RecordFragment extends Fragment {
+
+ public static final int REQUEST_MIC_AND_WRITE_STORAGE = 0;
+
// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER
private static final String ARG_POSITION = "position";
private static final String LOG_TAG = RecordFragment.class.getSimpleName();
@@ -86,8 +94,15 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container,
mRecordButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- onRecord(mStartRecording);
- mStartRecording = !mStartRecording;
+ if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
+ if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED ||
+ ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.RECORD_AUDIO, Manifest.permission.WRITE_EXTERNAL_STORAGE}, REQUEST_MIC_AND_WRITE_STORAGE);
+ } else {
+ onRecord(mStartRecording);
+ mStartRecording = !mStartRecording;
+ }
+ }
}
});
@@ -181,4 +196,15 @@ private void onPauseRecord(boolean pause) {
mChronometer.start();
}
}
+
+ @Override public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (requestCode == REQUEST_MIC_AND_WRITE_STORAGE) {
+ if (grantResults[0] == PackageManager.PERMISSION_GRANTED &&
+ grantResults[1] == PackageManager.PERMISSION_GRANTED) {
+
+ onRecord(mStartRecording);
+ mStartRecording = !mStartRecording;
+ }
+ }
+ }
}
\ No newline at end of file
diff --git a/app/src/main/res/layout/card_view.xml b/app/src/main/res/layout/card_view.xml
index 0ec48c46..ee9d3d42 100644
--- a/app/src/main/res/layout/card_view.xml
+++ b/app/src/main/res/layout/card_view.xml
@@ -1,18 +1,17 @@
-
-
+
-
-
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/app/src/main/res/values-v21/styles.xml b/app/src/main/res/values-v21/styles.xml
index 07b371ca..d0cc8450 100644
--- a/app/src/main/res/values-v21/styles.xml
+++ b/app/src/main/res/values-v21/styles.xml
@@ -3,7 +3,6 @@
+