MP1_CalebFontenot
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import android.content.Context;
|
||||
import android.support.test.InstrumentationRegistry;
|
||||
import android.support.test.runner.AndroidJUnit4;
|
||||
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Instrumentation test, which will execute on an Android device.
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public class ExampleInstrumentedTest {
|
||||
@Test
|
||||
public void useAppContext() throws Exception {
|
||||
// Context of the app under test.
|
||||
Context appContext = InstrumentationRegistry.getTargetContext();
|
||||
|
||||
assertEquals("com.bignerdranch.android.beatbox", appContext.getPackageName());
|
||||
}
|
||||
}
|
20
Book Files/20_MVVM/BeatBox/app/src/main/AndroidManifest.xml
Normal file
20
Book Files/20_MVVM/BeatBox/app/src/main/AndroidManifest.xml
Normal file
@@ -0,0 +1,20 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
package="com.bignerdranch.android.beatbox">
|
||||
|
||||
<application
|
||||
android:allowBackup="true"
|
||||
android:icon="@mipmap/ic_launcher"
|
||||
android:label="@string/app_name"
|
||||
android:supportsRtl="true"
|
||||
android:theme="@style/AppTheme">
|
||||
<activity android:name=".BeatBoxActivity">
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.MAIN"/>
|
||||
|
||||
<category android:name="android.intent.category.LAUNCHER"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
</application>
|
||||
|
||||
</manifest>
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -0,0 +1,44 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.res.AssetManager;
|
||||
import android.util.Log;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
public class BeatBox {
|
||||
private static final String TAG = "BeatBox";
|
||||
|
||||
private static final String SOUNDS_FOLDER = "sample_sounds";
|
||||
|
||||
private AssetManager mAssets;
|
||||
private List<Sound> mSounds = new ArrayList<>();
|
||||
|
||||
public BeatBox(Context context) {
|
||||
mAssets = context.getAssets();
|
||||
loadSounds();
|
||||
}
|
||||
|
||||
private void loadSounds() {
|
||||
String[] soundNames;
|
||||
try {
|
||||
soundNames = mAssets.list(SOUNDS_FOLDER);
|
||||
Log.i(TAG, "Found " + soundNames.length + " sounds");
|
||||
} catch (IOException ioe) {
|
||||
Log.e(TAG, "Could not list assets", ioe);
|
||||
return;
|
||||
}
|
||||
|
||||
for (String filename : soundNames) {
|
||||
String assetPath = SOUNDS_FOLDER + "/" + filename;
|
||||
Sound sound = new Sound(assetPath);
|
||||
mSounds.add(sound);
|
||||
}
|
||||
}
|
||||
|
||||
public List<Sound> getSounds() {
|
||||
return mSounds;
|
||||
}
|
||||
}
|
@@ -0,0 +1,12 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
import android.os.Bundle;
|
||||
|
||||
public class BeatBoxActivity extends SingleFragmentActivity {
|
||||
@Override
|
||||
protected Fragment createFragment() {
|
||||
return BeatBoxFragment.newInstance();
|
||||
}
|
||||
}
|
@@ -0,0 +1,87 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import android.databinding.DataBindingUtil;
|
||||
import android.os.Bundle;
|
||||
import android.support.annotation.Nullable;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v7.widget.GridLayoutManager;
|
||||
import android.support.v7.widget.RecyclerView;
|
||||
import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
|
||||
import com.bignerdranch.android.beatbox.databinding.FragmentBeatBoxBinding;
|
||||
import com.bignerdranch.android.beatbox.databinding.ListItemSoundBinding;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
public class BeatBoxFragment extends Fragment {
|
||||
|
||||
private BeatBox mBeatBox;
|
||||
|
||||
public static BeatBoxFragment newInstance() {
|
||||
return new BeatBoxFragment();
|
||||
}
|
||||
|
||||
@Override
|
||||
public View onCreateView(LayoutInflater inflater, ViewGroup container,
|
||||
Bundle savedInstanceState) {
|
||||
FragmentBeatBoxBinding binding = DataBindingUtil
|
||||
.inflate(inflater, R.layout.fragment_beat_box, container, false);
|
||||
|
||||
binding.recyclerView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
|
||||
binding.recyclerView.setAdapter(new SoundAdapter(mBeatBox.getSounds()));
|
||||
|
||||
return binding.getRoot();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(@Nullable Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
|
||||
mBeatBox = new BeatBox(getActivity());
|
||||
}
|
||||
|
||||
private class SoundHolder extends RecyclerView.ViewHolder {
|
||||
private ListItemSoundBinding mBinding;
|
||||
|
||||
private SoundHolder(ListItemSoundBinding binding) {
|
||||
super(binding.getRoot());
|
||||
mBinding = binding;
|
||||
mBinding.setViewModel(new SoundViewModel(mBeatBox));
|
||||
}
|
||||
|
||||
public void bind(Sound sound) {
|
||||
mBinding.getViewModel().setSound(sound);
|
||||
mBinding.executePendingBindings();
|
||||
}
|
||||
}
|
||||
|
||||
private class SoundAdapter extends RecyclerView.Adapter<SoundHolder> {
|
||||
private List<Sound> mSounds;
|
||||
|
||||
public SoundAdapter(List<Sound> sounds) {
|
||||
mSounds = sounds;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SoundHolder onCreateViewHolder(ViewGroup parent, int viewType) {
|
||||
LayoutInflater inflater = LayoutInflater.from(getActivity());
|
||||
ListItemSoundBinding binding = DataBindingUtil
|
||||
.inflate(inflater, R.layout.list_item_sound, parent, false);
|
||||
return new SoundHolder(binding);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBindViewHolder(SoundHolder holder, int position) {
|
||||
Sound sound = mSounds.get(position);
|
||||
holder.bind(sound);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int getItemCount() {
|
||||
return mSounds.size();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,30 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
|
||||
import android.os.Bundle;
|
||||
import android.support.v4.app.Fragment;
|
||||
import android.support.v4.app.FragmentManager;
|
||||
import android.support.v7.app.AppCompatActivity;
|
||||
|
||||
public abstract class SingleFragmentActivity extends AppCompatActivity {
|
||||
protected abstract Fragment createFragment();
|
||||
|
||||
protected int getLayoutResId() {
|
||||
return R.layout.activity_fragment;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
setContentView(getLayoutResId());
|
||||
FragmentManager manager = getSupportFragmentManager();
|
||||
Fragment fragment = manager.findFragmentById(R.id.fragment_container);
|
||||
|
||||
if (fragment == null) {
|
||||
fragment = createFragment();
|
||||
manager.beginTransaction()
|
||||
.add(R.id.fragment_container, fragment)
|
||||
.commit();
|
||||
}
|
||||
}
|
||||
}
|
@@ -0,0 +1,21 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
public class Sound {
|
||||
private String mAssetPath;
|
||||
private String mName;
|
||||
|
||||
public Sound(String assetPath) {
|
||||
mAssetPath = assetPath;
|
||||
String[] components = assetPath.split("/");
|
||||
String filename = components[components.length - 1];
|
||||
mName = filename.replace(".wav", "");
|
||||
}
|
||||
|
||||
public String getAssetPath() {
|
||||
return mAssetPath;
|
||||
}
|
||||
|
||||
public String getName() {
|
||||
return mName;
|
||||
}
|
||||
}
|
@@ -0,0 +1,28 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import android.databinding.BaseObservable;
|
||||
import android.databinding.Bindable;
|
||||
import android.util.Log;
|
||||
|
||||
public class SoundViewModel extends BaseObservable {
|
||||
private Sound mSound;
|
||||
private BeatBox mBeatBox;
|
||||
|
||||
public SoundViewModel(BeatBox beatBox) {
|
||||
mBeatBox = beatBox;
|
||||
}
|
||||
|
||||
@Bindable
|
||||
public String getTitle() {
|
||||
return mSound.getName();
|
||||
}
|
||||
|
||||
public Sound getSound() {
|
||||
return mSound;
|
||||
}
|
||||
|
||||
public void setSound(Sound sound) {
|
||||
mSound = sound;
|
||||
notifyChange();
|
||||
}
|
||||
}
|
@@ -0,0 +1,5 @@
|
||||
<FrameLayout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:id="@+id/fragment_container"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
@@ -0,0 +1,8 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout
|
||||
xmlns:android="http://schemas.android.com/apk/res/android">
|
||||
<android.support.v7.widget.RecyclerView
|
||||
android:id="@+id/recycler_view"
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="match_parent"/>
|
||||
</layout>
|
@@ -0,0 +1,14 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
xmlns:tools="http://schemas.android.com/tools">
|
||||
<data>
|
||||
<variable
|
||||
name="viewModel"
|
||||
type="com.bignerdranch.android.beatbox.SoundViewModel"/>
|
||||
</data>
|
||||
<Button
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="120dp"
|
||||
android:text="@{viewModel.title}"
|
||||
tools:text="Sound name"/>
|
||||
</layout>
|
Binary file not shown.
After Width: | Height: | Size: 3.3 KiB |
Binary file not shown.
After Width: | Height: | Size: 2.2 KiB |
Binary file not shown.
After Width: | Height: | Size: 4.7 KiB |
Binary file not shown.
After Width: | Height: | Size: 7.5 KiB |
Binary file not shown.
After Width: | Height: | Size: 10 KiB |
@@ -0,0 +1,6 @@
|
||||
<resources>
|
||||
<!-- Example customization of dimensions originally defined in res/values/dimens.xml
|
||||
(such as screen margins) for screens with more than 820dp of available width. This
|
||||
would include 7" and 10" devices in landscape (~960dp and ~1280dp respectively). -->
|
||||
<dimen name="activity_horizontal_margin">64dp</dimen>
|
||||
</resources>
|
@@ -0,0 +1,6 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<resources>
|
||||
<color name="colorPrimary">#3F51B5</color>
|
||||
<color name="colorPrimaryDark">#303F9F</color>
|
||||
<color name="colorAccent">#FF4081</color>
|
||||
</resources>
|
@@ -0,0 +1,5 @@
|
||||
<resources>
|
||||
<!-- Default screen margins, per the Android Design guidelines. -->
|
||||
<dimen name="activity_horizontal_margin">16dp</dimen>
|
||||
<dimen name="activity_vertical_margin">16dp</dimen>
|
||||
</resources>
|
@@ -0,0 +1,3 @@
|
||||
<resources>
|
||||
<string name="app_name">BeatBox</string>
|
||||
</resources>
|
@@ -0,0 +1,11 @@
|
||||
<resources>
|
||||
|
||||
<!-- Base application theme. -->
|
||||
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
|
||||
<!-- Customize your theme here. -->
|
||||
<item name="colorPrimary">@color/colorPrimary</item>
|
||||
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
|
||||
<item name="colorAccent">@color/colorAccent</item>
|
||||
</style>
|
||||
|
||||
</resources>
|
@@ -0,0 +1,17 @@
|
||||
package com.bignerdranch.android.beatbox;
|
||||
|
||||
import org.junit.Test;
|
||||
|
||||
import static org.junit.Assert.*;
|
||||
|
||||
/**
|
||||
* Example local unit test, which will execute on the development machine (host).
|
||||
*
|
||||
* @see <a href="http://d.android.com/tools/testing">Testing documentation</a>
|
||||
*/
|
||||
public class ExampleUnitTest {
|
||||
@Test
|
||||
public void addition_isCorrect() throws Exception {
|
||||
assertEquals(4, 2 + 2);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user