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 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ 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 @@ +