Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages

, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

Repository files navigation

Flashback Music

This is a class project for CSE 110: Software Engineering, Winter 2018 at UCSD. During this course we learn agile concepts (user stories, iterations, burndown, etc.) and apply design patterns (strategy, factory, adapter, etc.) into an Android application project.

Introduction

The introduction is excerpted from the course website.

====

Mobile Venture Capital (MVC) is taking a new approach to finding and grooming new high tech companies.They have developed a multi-round approach for evaluating up-and-coming start-ups.In the first round, the start-ups competed based on their mobile product ideas. Your team is one of the lucky few selected to go on to the second round.In this second round, your team is to develop a product of MVC's design, creating a level playing field for all the teams.The purpose of this round is to find the best software development teams: those that can predictably plan, design, implement, and deliver a high-quality system.This is not a winner-take-all competition: All teams that exceed their performance benchmarks will be funded by MVC.

Flashback Music: Context Aware Music Selection for your Smartphone

[Paragraph 1] Flashback Music is an Android app that adaptively selects music to play based on your location and time of day to help bring back memories of past times. Like any music player, you can select tracks or albums to play. When Flashback Music is put into flashback mode, it automatically selects tracks to remind you of past times: If you played a track at a place, you're more likely to hear that track when you return to that place again. The same goes for time-of-day and day of the week. Whether you're in flashback mode or not, the player displays the date, time, and place when the track was last played. You can indicate a track is a favorite by clicking the + button next to the track, which will turn into a check mark and increase the chance of the track being played in flashback mode. More recently played tracks are more likely to be played in flashback mode, but even the least-recently-played track has a chance of being played again. If you don't want to hear a track again, clicking the + twice (or the check mark once) will indicate dislike, and an "x" will be displayed in place of the + or checkmark that was previously displayed. Such a track will not be played in flashback mode, nor when an album containing the track is played. Clicking the "x" returns the track's status to the neutral +.

[paragraph 2] The feedback from the release of your app in the Google Play Store has been enlightening, to say the least. The reviews were quite pointed in what users really wanted. While they liked the app as-is, it also overlooked a major opportunity. Indeed, MVC was aware of this opportunity, but was mindful of releasing an early MVP that would provide useful feedback. Other feedback was a bit of a surprise. The following paragraphs provides new features, and modifies others. If a previous feature (from Paragraph 1 and the clarifications on Piazza) is not stated as modified, it remains as-is in the new version of the app.

[paragraph 3] Although users like Flashback Mode enough, it turns out what they're really interested in is what others around them are listening to. With Flashback Music 2.0, we introduce a replacement for Flashback Mode, called Vibe Mode (VM), which builds a playlist based on what others around you have been listening to recently. When FBM is put into Vibe Mode, it automatically selects tracks based on what others around you have been listening to. Priority is given to a track based on first (a) whether it was played near the user's present location, second (b) whether it was played in the last week, and third (c) whether it was played by a friend. When multiple of these factors are present, each is given equal weight in producing the ordering of tracks. Ties are broken according to the (a)-to-(c) ordering of the preceding criteria.

[paragraph 4] Because the track list in Vibe Mode could include any possible song, FBM now includes the ability to streamsupports downloading tracks from remote sources (e.g., the same source from which another user streameddownloaded the track), rather than storing tracks. And because Vibe Mode tracks are not stored locally, FBM remembers all the Vibe Mode tracks you've played, andAll the tracks you've downloaded can be sorted according to title, album, artist, or favorite status.

[paragraph 4b] A track or album is downloaded via a web URL provided by the user. Browsing of tracks and albums for download need not be supported within the app. That is, the URL can be found via web browsing and then copy-pasted or typed into a simple text-entry box on a download screen within the app. The download feature only needs to work on totally open sites; that is, it need not support the login and password required on many music download sites.

[paragraph 5] As before, the player displays the date, time, and place when a track was last played. Additionally, because that track might have been played by someone else, if the track was played by a friend, the friend's name is displayed as well, otherwise a proxy name is displayed for the anonymous user. The proxy name can be any reasonable name (how about something cute?), but it has to be the same each time the same anonymous user is the source of the track. If a track was played by you, then "you" is displayed in italics: you.

[paragraph 6] Finally, users stated a preference for being able to see upcoming tracks, much like shown in a traditional music player. Thus, when playing an album or in Vibe Mode, the complete track list should be shownviewable.

Contributors:

Below is Team 19 of CSE 110 Winter 2018.

  • Sarah Ji
  • Meeta Marathe
  • Kunal Parulekar
  • Tyler Tran
  • Yue Wu

About

Context Aware Music Selection for your Smartphone

Topics

Resources

Stars

0 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages